{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d1f20875-c50d-46df-906b-49ec1d0c6002",
   "metadata": {},
   "source": [
    "# 7.6 实现ReLU函数"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "c90a18b9-d8e8-431c-856c-35f1e4ed05e1",
   "metadata": {},
   "source": [
    "### 1.任务描述\n",
    "\n",
    "假设有一组线性输出X：\n",
    "\n",
    "[-10.,-9.5,-9.,-8.5,-8.,-7.5,-7.,-6.5,-6.,-5.5,-5.,-4.5,-4.,-3.5,-3.,-2.5,-2.,-1.5,-1.,\n",
    "-0.5,0.,0.5,1.,1.5,2.,2.5,3.,3.5,4.,4.5,5., 5.5,6., 6.5,7., 7.5,8., 8.5,9., 9.5,10.]\n",
    "要求：\n",
    "\n",
    "- 使用ReLU函数对线性结果进行转换，得到转换结果Y\n",
    "- 以X为x轴数据，以Y为y轴数据，绘制ReLU函数的曲线\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "f5b4fc39-cbcf-432a-bf1e-e75e642d4b87",
   "metadata": {},
   "source": [
    "### 2.知识准备\n",
    "\n",
    "见教程。"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "b624ebee-980f-4c1e-b963-a24ff0b669f6",
   "metadata": {},
   "source": [
    "### 3.任务分析\n",
    "\n",
    "通过tensorflow.where(X<0, 0, X)可以实现ReLU函数，小于0的数都变为0，大于0的数都保留本身的数值。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "435c6090-cfda-4f46-a550-22a368e41e4a",
   "metadata": {},
   "source": [
    "### 4.任务实施\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "ec75eb6c-5da3-467d-a471-ca3b47242dd6",
   "metadata": {},
   "source": [
    "执行代码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "2ae9da58-e339-4d22-9f8d-ca255711d89e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X: [-10.   -9.5  -9.   -8.5  -8.   -7.5  -7.   -6.5  -6.   -5.5  -5.   -4.5\n",
      "  -4.   -3.5  -3.   -2.5  -2.   -1.5  -1.   -0.5   0.    0.5   1.    1.5\n",
      "   2.    2.5   3.    3.5   4.    4.5   5.    5.5   6.    6.5   7.    7.5\n",
      "   8.    8.5   9.    9.5  10. ]\n",
      "Y: [ 0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.\n",
      "  0.   0.   0.   0.   0.   0.   0.   0.5  1.   1.5  2.   2.5  3.   3.5\n",
      "  4.   4.5  5.   5.5  6.   6.5  7.   7.5  8.   8.5  9.   9.5 10. ]\n"
     ]
    },
    {
     "data": {
      "image/png": "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WRITEzl+/DhxcXG22759+4iLi+PUqVO8/vrrrFixgoSEhLysWURERDxEroNGprNnz3LfffcRGxvL2bNnqVKlCl988QUADRs2pGvXriQlJd1yoSIiIuJ5bilopKWl0blzZ/bs2UOxYsUoV64cI0eO5PXXX+fIkSP06NGDBQsWuGzXVhERESnYchw0rh07OmbMGPbs2cMvv/xCeHg4AK+88gqNGjWiW7dumM3mvKtUREREPE6OgkZaWprdzJFXXnmFxYsXU6tWLbvzpkyZgsVi4fjx43lTpYiIiHikHM06SUpK4urVq7bvK1WqRKVKlWz7n3h7e9va2rZty6xZswC4ePFiHpUrIiIiniRH62iAdffVawMFWFcL9fHxwdvbGy8vL0wmEyaTCcMwyMjIwGKxkJKSUuAupWgdDRERkdxx2Toa14cMQLNKRERExKlbnt4qIiIikhUFDREREXGZXC1BXq1atZueU7p0aerWrcvgwYNp0KBBbp5GREREPFyugkZwcDAmk+mG5yQmJvL111+zcOFCfvzxR+6///5cFSgiIiKeK8ezTnLi8OHDtGnThttvv50NGza46mlyTbNOREREcie7n6EuHaNRtWpV+vbty7Zt21z5NCIiIlJAuXwwqJ+fHxaLxdVPIyIiIgWQS4NGYmIis2fPtu2DIiIiIkVLrgaDPvbYYzc958qVK2zatInz588zZ86c3DyNiIiIeLhcBY3Fixff9JygoCDq1KnD559/TufOnXPzNCIiIuLhchU0NOZCREREssPlg0HPnj3Ln3/+6eqnERERkQLI5UFjwYIFNG/e3NVPIyIiIgWQ9joRERERl1HQEBEREZdR0BARERGXUdAQERERl8nV9NakpKRsn5uampqbpxAREZFCIFdBo0SJEjfdJl5EREQkV0Hj6aefVtAQERGRm8pV0IiOjs7jMkRERKQwytPBoAcOHOD777/n7NmznDt3jt9//z0vH15EREQ8TJ4EjeTkZDp27Eh4eDhdu3YlNjaWQ4cO8c9//pMOHTrkaPCoiIiIFB55EjTGjh3LTz/9xEsvvWQ7Vrt2bcaOHcuaNWt499138+JpRERExMPkSdBYvHgxgwYN4q233sIwDMC6Tfzo0aMZOHAgCxcuzIunEREREQ+TJ0HjxIkThIeHO22rWrUqp06dyounEREREQ+TJ0GjZs2abN261Wnb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",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "# 定义ReLU函数\n",
    "def ReLU(X):\n",
    "    result=tf.where(X<0,0,X)\n",
    "    return result;\n",
    "    \n",
    "# 构造线性输出\n",
    "X=tf.range(start=-10,limit=10.5,delta=0.5,dtype=tf.float64)\n",
    "print('X:',X.numpy())\n",
    "# 使用ReLU函数对线性结果进行转换，得到Y\n",
    "Y=ReLU(X)\n",
    "# 使用TensorFlow提供的函数\n",
    "# Y=tf.nn.relu(X)\n",
    "print('Y:',Y.numpy())\n",
    "# 可视化\n",
    "plt.figure(figsize=(6,4))\n",
    "# 绘制直线\n",
    "plt.plot(X, Y, color=\"r\", linewidth=3)\n",
    "plt.xlabel(\"线性结果X\",fontsize=14)\n",
    "plt.ylabel(\"ReLU函数输出Y\",fontsize=14)\n",
    "# x轴刻度范围\n",
    "plt.xlim(-12,12)\n",
    "# y轴刻度范围\n",
    "plt.ylim(-12,12)\n",
    "plt.suptitle(\"ReLU函数\",fontsize=20)\n",
    "# 显示\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e3b3e36e-8418-4caf-af51-d8ac80e2a321",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
